# DETALJNO UPUTSTVO ZA INSTALACIJU DRAFTSCOPE APLIKACIJE

================================================================================

## SADRŽAJ

1. Struktura projekta
2. Početno postavljanje direktorija i datoteka
3. Postavljanje Python virtualne okoline
4. Postavljanje dozvola i vlasništva datoteka
5. Konfiguracija i instalacija PHP ovisnosti
6. Konfiguracija baze podataka
7. Konfiguracija sigurnosti uploads direktorija
8. Konfiguracija web servera
9. Povezivanje Python virtualne okoline s PHP skriptama
10. Testiranje funkcionalnosti
11. Rješavanje čestih problema
12. Dodatne sigurnosne mjere i održavanje
13. Završno testiranje aplikacije

================================================================================

## 1. STRUKTURA PROJEKTA

/var/www/html/
├── index.php                  # Glavna stranica
├── upload.php                 # Skripta za upload
├── detect_dimensions.php      # Detekcija dimenzija
├── manual_add.php             # Ručno dodavanje
├── export.php                 # Izvoz u Excel
├── download.php               # Preuzimanje datoteka
├── db_config.php              # Konfiguracija baze
├── init_db.php                # Inicijalizacija baze
├── improved_analyzer.py       # Python skripta za analizu
├── composer.json              # Definicija PHP ovisnosti
├── composer.lock              # Zaključane verzije ovisnosti
├── css/
│   └── style.css              # CSS stilovi
├── js/
│   └── main.js                # JavaScript funkcije
├── vendor/                    # Composer ovisnosti (generirani)
├── logs/                      # Log datoteke
│   ├── detect_dimensions.log
│   ├── upload.log
│   └── db_init.log
└── uploads/                   # Direktorij za uploadane datoteke
    └── .htaccess              # Ograničenje direktnog pristupa

================================================================================

## 2. POČETNO POSTAVLJANJE DIREKTORIJA I DATOTEKA

# Logiraj se na server
ssh korisnik@vas-server

# Navigiraj do web root direktorija
cd /var/www/html

# Stvori potrebne direktorije
mkdir -p css js uploads logs src

================================================================================

## 3. POSTAVLJANJE PYTHON VIRTUALNE OKOLINE

# Instaliraj Python 3 ako već nije instaliran
sudo apt-get update
sudo apt-get install -y python3 python3-pip python3-venv

# Stvori Python virtualnu okolinu
python3 -m venv /var/www/env

# Aktiviraj virtualnu okolinu
source /var/www/env/bin/activate

# Instaliraj potrebne Python pakete
pip install pillow numpy reportlab pandas openpyxl pdfplumber opencv-python

# Deaktiviraj virtualnu okolinu nakon instalacije
deactivate

================================================================================

## 4. POSTAVLJANJE DOZVOLA I VLASNIŠTVA DATOTEKA

# Postavi vlasništvo svih datoteka i direktorija na web server korisnika
sudo chown -R www-data:www-data /var/www/html

# Postavi osnovne dozvole za direktorije (755 - čitanje, pisanje, izvršavanje za vlasnika, čitanje i izvršavanje za grupu i ostale)
sudo find /var/www/html -type d -exec chmod 755 {} \;

# Postavi osnovne dozvole za datoteke (644 - čitanje i pisanje za vlasnika, čitanje za grupu i ostale)
sudo find /var/www/html -type f -exec chmod 644 {} \;

# Postavi posebne dozvole za uploads i logs direktorije (775 - omogućuje web serveru pisanje)
sudo chmod -R 775 /var/www/html/uploads
sudo chmod -R 775 /var/www/html/logs

# Osiguraj da Python skripta ima dozvole za izvršavanje
sudo chmod 755 /var/www/html/improved_analyzer.py

================================================================================

## 5. KONFIGURACIJA I INSTALACIJA PHP OVISNOSTI

### Postavljanje composer.json

# Stvori composer.json datoteku
cat > /var/www/html/composer.json << EOL
{
    "name": "draftscope/detektor-dimenzija",
    "description": "Aplikacija za detekciju dimenzija na tehničkim nacrtima",
    "type": "project",
    "require": {
        "php": ">=8.0",
        "phpoffice/phpspreadsheet": "^1.28",
        "ext-gd": "*",
        "ext-json": "*",
        "ext-mysqli": "*"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "config": {
        "optimize-autoloader": true,
        "sort-packages": true
    },
    "scripts": {
        "post-install-cmd": [
            "mkdir -p uploads",
            "mkdir -p logs",
            "chmod 755 uploads",
            "chmod 755 logs"
        ]
    }
}
EOL

### Instalacija Composer ovisnosti

# Instaliraj Composer globalno ako već nije instaliran
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

# Instaliraj PHP ovisnosti (pokreni iz direktorija projekta)
cd /var/www/html
composer install

# Provjeri jesu li ovisnosti ispravno instalirane
ls -la vendor/

================================================================================

## 6. KONFIGURACIJA BAZE PODATAKA

### Stvaranje db_config.php

# Stvori datoteku db_config.php (zamijeni parametre svojim podacima)
cat > /var/www/html/db_config.php << EOL
<?php
/**
 * Konfiguracija baze podataka
 * 
 * Datoteka: db_config.php
 * Opis: Sadrži postavke za povezivanje s bazom podataka
 */

// Parametri za povezivanje
\$dbHost = 'localhost';
\$dbUser = 'vas_korisnik';
\$dbPass = 'vasa_lozinka';
\$dbName = 'mjerenjeproba';

// Stvaranje konekcije
\$conn = new mysqli(\$dbHost, \$dbUser, \$dbPass);

// Provjera konekcije
if (\$conn->connect_error) {
    die("Konekcija neuspješna: " . \$conn->connect_error);
}
EOL

# Postavi sigurnosne dozvole za db_config.php
sudo chmod 640 /var/www/html/db_config.php
sudo chown www-data:www-data /var/www/html/db_config.php

### Inicijalizacija baze podataka

# Pokreni skriptu za inicijalizaciju
php /var/www/html/init_db.php

================================================================================

## 7. KONFIGURACIJA SIGURNOSTI UPLOADS DIREKTORIJA

# Stvori .htaccess datoteku za uploads direktorij
cat > /var/www/html/uploads/.htaccess << EOL
# Zaštita uploads direktorija
Options -Indexes
RemoveHandler .php .phtml .php3 .php4 .php5 .php7 .php8
RemoveType .php .phtml .php3 .php4 .php5 .php7 .php8

# Zabrani sve pristupe prema zadanim postavkama
<FilesMatch ".*">
    Order Allow,Deny
    Deny from all
</FilesMatch>

# Dozvoli samo određene tipove datoteka
<FilesMatch "\.(jpg|jpeg|png|gif|pdf|xlsx)$">
    Order Allow,Deny
    Allow from all
    
    # Postavi ispravne MIME tipove
    AddType application/pdf .pdf
    AddType application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xlsx
    AddType image/jpeg .jpg .jpeg
    AddType image/png .png
    AddType image/gif .gif
</FilesMatch>

# Dodatna sigurnosna zaglavlja
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "DENY"
Header set X-XSS-Protection "1; mode=block"
EOL

# Postavi ispravne dozvole
sudo chmod 644 /var/www/html/uploads/.htaccess
sudo chown www-data:www-data /var/www/html/uploads/.htaccess

================================================================================

## 8. KONFIGURACIJA WEB SERVERA

### Konfiguracija za Apache

# Stvori apache konfiguracijsku datoteku
sudo nano /etc/apache2/sites-available/draftscope.conf

# Dodaj sljedeći sadržaj:
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName vas-domena.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/draftscope_error.log
    CustomLog ${APACHE_LOG_DIR}/draftscope_access.log combined
</VirtualHost>

# Omogući konfiguraciju i potrebne module
sudo a2ensite draftscope.conf
sudo a2enmod rewrite
sudo a2enmod headers

# Restartaj Apache
sudo systemctl restart apache2

### Konfiguracija za Nginx (alternativno)

# Stvori nginx konfiguracijsku datoteku
sudo nano /etc/nginx/sites-available/draftscope

# Dodaj sljedeći sadržaj:
server {
    listen 80;
    server_name vas-domena.com;
    root /var/www/html;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; # Prilagodite prema verziji PHP-a
    }

    location ~  {
        deny all;
    }

    location /uploads {
        # Blokirati direktan pristup PHP datotekama u uploads direktoriju
        location ~ \.php$ {
            deny all;
        }
    }

    # Dodatna konfiguracija za logove
    error_log /var/log/nginx/draftscope_error.log;
    access_log /var/log/nginx/draftscope_access.log;
}

# Omogući konfiguraciju
sudo ln -s /etc/nginx/sites-available/draftscope /etc/nginx/sites-enabled/

# Provjeri konfiguraciju
sudo nginx -t

# Restartaj Nginx
sudo systemctl restart nginx

================================================================================

## 9. POVEZIVANJE PYTHON VIRTUALNE OKOLINE S PHP SKRIPTAMA

# Uredi sve PHP skripte koje pozivaju Python skripta
# Primjer za detect_dimensions.php, manual_add.php i upload.php:

# Putanja do Python interpretera u virtualnoj okolini
$pythonInterpreter = '/var/www/env/bin/python3';

# Komanda za poziv Python skripte
$command = escapeshellcmd($pythonInterpreter . ' ' . 
           escapeshellarg($pythonScript) .
           ' --file_path ' . escapeshellarg($filePath) .
           ' --output_pdf ' . escapeshellarg($markedPdfPath) .
           ' --output_excel ' . escapeshellarg($excelPath));

================================================================================

## 10. TESTIRANJE FUNKCIONALNOSTI

# Provjeri dostupnost aplikacije
curl http://vas-domena.com/

# Provjera PHP verzije i ekstenzija
php -v
php -m | grep gd
php -m | grep mysqli
php -m | grep json

# Provjera Python virtualne okoline
/var/www/env/bin/python3 --version
/var/www/env/bin/pip list

# Provjeri log datoteke za probleme
tail -f /var/log/apache2/draftscope_error.log
# ili
tail -f /var/log/nginx/draftscope_error.log

# Provjeri aplikacijske logove
tail -f /var/www/html/logs/upload.log
tail -f /var/www/html/logs/detect_dimensions.log

================================================================================

## 11. RJEŠAVANJE ČESTIH PROBLEMA

### Problemi s dozvolama

# Ako se pojave problemi s dozvolama
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
sudo chmod -R 775 /var/www/html/uploads
sudo chmod -R 775 /var/www/html/logs
sudo chown -R www-data:www-data /var/www/html

### Problemi s Python skriptom

# Ako Python skripta ne može biti izvršena
sudo chmod 755 /var/www/html/improved_analyzer.py

# Provjeri može li web server korisnik pristupiti Python virtualnoj okolini
sudo -u www-data /var/www/env/bin/python3 -V

# Testiraj Python skriptu ručno
sudo -u www-data /var/www/env/bin/python3 /var/www/html/improved_analyzer.py --help

### Problemi s bazom podataka

# Provjeri pristup bazi podataka
mysql -u vas_korisnik -p -e "SHOW DATABASES;"
mysql -u vas_korisnik -p -e "USE mjerenjeproba; SHOW TABLES;"

# Ako tablice nisu kreirane, ponovno izvrši inicijalizaciju
php /var/www/html/init_db.php

### Problemi s PHP ovisnostima

# Ako Composer ovisnosti nisu ispravno instalirane
cd /var/www/html
composer clear-cache
composer update

# Provjeri je li PhpSpreadsheet dostupan
ls -la vendor/phpoffice/phpspreadsheet

================================================================================

## 12. DODATNE SIGURNOSNE MJERE I ODRŽAVANJE

### Redovito ažuriranje sustava

# Ažuriranje Ubuntu/Debian sustava
sudo apt update
sudo apt upgrade

# Ažuriranje PHP paketa
composer update

# Ažuriranje Python paketa
source /var/www/env/bin/activate
pip install --upgrade pillow numpy reportlab pandas openpyxl pdfplumber opencv-python
deactivate

### Redovito čišćenje privremenih datoteka

# Dodaj u cron za čišćenje starih datoteka (stvoriti skriptu)
cat > /var/www/html/cleanup.php << EOL
<?php
/**
 * Skripta za čišćenje starih datoteka
 */

// Definiranje putanja
\$rootPath = '/var/www/html/';
\$uploadsPath = \$rootPath . 'uploads/';
\$logsPath = \$rootPath . 'logs/';
\$daysToKeep = 30;

// Funkcija za brisanje starih datoteka
function deleteOldFiles(\$dir, \$days) {
    \$now = time();
    \$files = scandir(\$dir);
    
    foreach (\$files as \$file) {
        if (\$file == '.' || \$file == '..' || \$file == '.htaccess') continue;
        
        \$filePath = \$dir . \$file;
        if (is_file(\$filePath)) {
            if (\$now - filemtime(\$filePath) > \$days * 86400) {
                unlink(\$filePath);
                echo "Obrisana datoteka: \$filePath\n";
            }
        }
    }
}

// Obriši stare datoteke
deleteOldFiles(\$uploadsPath, \$daysToKeep);
// Obriši stare logove ako postanu preveliki
// deleteOldFiles(\$logsPath, \$daysToKeep);

echo "Čišćenje završeno: " . date('Y-m-d H:i:s') . "\n";
EOL

# Dodaj u cron
echo "0 2 * * * php /var/www/html/cleanup.php > /dev/null 2>&1" | sudo crontab -u www-data -

### Sigurnosne kopije

# Stvori skriptu za sigurnosnu kopiju
cat > /var/www/backup.sh << EOL
#!/bin/bash
# Skripta za stvaranje sigurnosnih kopija

# Definiraj varijable
BACKUP_DIR="/var/backups/draftscope"
MYSQL_USER="vas_korisnik"
MYSQL_PASSWORD="vasa_lozinka"
MYSQL_DATABASE="mjerenjeproba"
WEB_ROOT="/var/www/html"
DATE=\$(date +%Y-%m-%d)

# Stvori direktorij za backup ako ne postoji
mkdir -p \$BACKUP_DIR

# Backup baze podataka
mysqldump -u\$MYSQL_USER -p\$MYSQL_PASSWORD \$MYSQL_DATABASE > \$BACKUP_DIR/\$MYSQL_DATABASE-\$DATE.sql

# Backup datoteka
tar -czf \$BACKUP_DIR/draftscope-files-\$DATE.tar.gz -C \$WEB_ROOT .

# Zadržavaj samo posljednjih 7 backupa
find \$BACKUP_DIR -name "*.sql" -type f -mtime +7 -delete
find \$BACKUP_DIR -name "*.tar.gz" -type f -mtime +7 -delete

echo "Backup završen: \$(date)"
EOL

# Postavi dozvole i dodaj u cron
sudo chmod 700 /var/www/backup.sh
echo "0 3 * * * /var/www/backup.sh > /var/log/backup.log 2>&1" | sudo tee -a /etc/crontab

================================================================================

## 13. ZAVRŠNO TESTIRANJE APLIKACIJE

1. Otvorite web preglednik i posjetite vašu aplikaciju (http://vas-domena.com/)
2. Pokušajte uploadati PDF tehnički nacrt
3. Testirajte automatsku detekciju dimenzija
4. Testirajte ručno dodavanje dimenzija
5. Testirajte izvoz u Excel
6. Testirajte preuzimanje generiranih datoteka
7. Provjerite sve logove za eventualne greške

================================================================================

# ZAKLJUČAK

Ovaj detaljni vodič osigurava uspješnu instalaciju i konfiguraciju DraftScope aplikacije za detekciju dimenzija na Linux hosting okruženju. Upute su prilagođene specifičnim potrebama projekta, uključujući korištenje Python virtualne okoline i sve potrebne sigurnosne postavke.

U slučaju bilo kakvih pitanja ili problema, obratite se tehničkoj podršci.

================================================================================

Similar code found with 2 license types